| Conditions | 4 |
| Paths | 8 |
| Total Lines | 163 |
| Code Lines | 107 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | var EvidenceAPI = {}; |
||
| 65 | EvidenceAPI.instantiateApplicationEvidencePanel = function (criteriaId, criteriaType, criteriaName, criteriaDescription) { |
||
| 66 | var evidencePanel = document.getElementById("applicantEvidencePanelTemplate").firstElementChild.cloneNode(true); |
||
| 67 | |||
| 68 | evidencePanel.classList.remove("template"); |
||
| 69 | |||
| 70 | var triggerName = EvidenceAPI.evidenceTriggerName(criteriaId, criteriaType); |
||
| 71 | var menuItemId = EvidenceAPI.menuItemId(criteriaId, criteriaType); |
||
| 72 | evidencePanel.setAttribute("data-evidence-target", triggerName); |
||
| 73 | evidencePanel.setAttribute("aria-labelledby", menuItemId); |
||
| 74 | |||
| 75 | //SET DATA ATTRIBUTES |
||
| 76 | evidencePanel.setAttribute("data-criteria-type", criteriaType); |
||
| 77 | evidencePanel.setAttribute("data-criteria-id", criteriaId); |
||
| 78 | |||
| 79 | //SET SKILL TITLE AND DESCRIPTION |
||
| 80 | evidencePanel.querySelector(".applicant-evidence__skill-title").innerHTML = criteriaName; |
||
| 81 | if (criteriaDescription) { |
||
| 82 | evidencePanel.querySelector(".applicant-evidence__skill-description").innerHTML = criteriaDescription; |
||
| 83 | } |
||
| 84 | |||
| 85 | //MODIFY IDs FOR UNIQUENESS |
||
| 86 | var idSuffix = "_" + triggerName; |
||
| 87 | |||
| 88 | //SKILL DELCARATION IDS |
||
| 89 | Utilities.addSuffixToElementId(evidencePanel, "applicationEvidenceDeclarationText", idSuffix); |
||
|
|
|||
| 90 | |||
| 91 | // MICRO-REFERENCE IDs |
||
| 92 | Utilities.addSuffixToElementId(evidencePanel, "applicationEvidenceReferenceName", idSuffix); |
||
| 93 | Utilities.addSuffixToElementId(evidencePanel, "applicationEvidenceReferenceEmail", idSuffix); |
||
| 94 | Utilities.addSuffixToElementId(evidencePanel, "applicationEvidenceReferenceRelationship", idSuffix); |
||
| 95 | Utilities.addSuffixToElementId(evidencePanel, "applicationEvidenceReferenceFrom", idSuffix); |
||
| 96 | Utilities.addSuffixToElementId(evidencePanel, "applicationEvidenceReferenceUntil", idSuffix); |
||
| 97 | Utilities.addSuffixToElementId(evidencePanel, "applicationEvidenceReferenceExpLevel", idSuffix); |
||
| 98 | Utilities.addSuffixToElementId(evidencePanel, "applicationEvidenceReferenceStory", idSuffix); |
||
| 99 | |||
| 100 | // SKILL SAMPLE IDs |
||
| 101 | Utilities.addSuffixToElementId(evidencePanel, "applicationEvidenceSampleName", idSuffix); |
||
| 102 | Utilities.addSuffixToElementId(evidencePanel, "applicationEvidenceSampleType", idSuffix); |
||
| 103 | Utilities.addSuffixToElementId(evidencePanel, "applicationEvidenceSampleDateCreated", idSuffix); |
||
| 104 | Utilities.addSuffixToElementId(evidencePanel, "applicationEvidenceSampleHttpLink", idSuffix); |
||
| 105 | Utilities.addSuffixToElementId(evidencePanel, "applicationEvidenceSampleStory", idSuffix); |
||
| 106 | |||
| 107 | // POPULATE "SLIDERS" |
||
| 108 | // DEV-NOTE: Beware copy-paste errors, and confusing EXPERTISE with EXPERIENCE |
||
| 109 | |||
| 110 | var expertiseSelector = evidencePanel.querySelector(".applicant-evidence__expertise-wrapper"); |
||
| 111 | var expertiseRadioGroup = evidencePanel.querySelector(".applicant-evidence__expertise-radiogroup"); |
||
| 112 | var expertiseRadioGroupTitle = evidencePanel.querySelector(".applicant-evidence__expertise-radiogroup-title"); |
||
| 113 | expertiseRadioGroupTitle.setAttribute("id", "expertiseRadioGroupTitle"+idSuffix); |
||
| 114 | expertiseRadioGroup.setAttribute("aria-labelledby", "expertiseRadioGroupTitle"+idSuffix); |
||
| 115 | expertiseSelector.innerHTML = ""; //clear template items |
||
| 116 | LookupAPI.getLookupResponse("skill_level", function (items) { |
||
| 117 | var numberOfItems = items.length; |
||
| 118 | var fragment = document.createDocumentFragment(); |
||
| 119 | for (var i = 0; i < numberOfItems; i++) { |
||
| 120 | var item = items[i]; |
||
| 121 | var outputValue = item.id; //TODO: change to value |
||
| 122 | var itemElement = EvidenceAPI.instantiateApplicationEvidenceExpertiseItem(criteriaId, criteriaType, item.id, item.value, outputValue, numberOfItems); |
||
| 123 | fragment.appendChild(itemElement); |
||
| 124 | } |
||
| 125 | expertiseSelector.appendChild(fragment); |
||
| 126 | }); |
||
| 127 | |||
| 128 | var experienceSelector = evidencePanel.querySelector(".applicant-evidence__experience-wrapper"); |
||
| 129 | var experienceRadioGroup = evidencePanel.querySelector(".applicant-evidence__experience-radiogroup"); |
||
| 130 | var experienceRadioGroupTitle = evidencePanel.querySelector(".applicant-evidence__experience-radiogroup-title"); |
||
| 131 | expertiseRadioGroupTitle.setAttribute("id", "expertiseRadioGroupTitle"+idSuffix); |
||
| 132 | expertiseRadioGroup.setAttribute("aria-labelledby", "expertiseRadioGroupTitle"+idSuffix); |
||
| 133 | experienceSelector.innerHTML = ""; //clear template items |
||
| 134 | LookupAPI.getLookupResponse("experience_level", function (items) { |
||
| 135 | var numberOfItems = items.length; |
||
| 136 | var fragment = document.createDocumentFragment(); |
||
| 137 | for (var i = 0; i < numberOfItems; i++) { |
||
| 138 | var item = items[i]; |
||
| 139 | var outputValue = item.id; //TODO: change to value |
||
| 140 | var itemElement = EvidenceAPI.instantiateApplicationEvidenceExperienceItem(criteriaId, criteriaType, item.id, item.value, outputValue, numberOfItems); |
||
| 141 | fragment.appendChild(itemElement); |
||
| 142 | } |
||
| 143 | experienceSelector.appendChild(fragment); |
||
| 144 | }); |
||
| 145 | |||
| 146 | //POPULATE SELECT INPUTS |
||
| 147 | var relationshipSelect = evidencePanel.querySelector("#applicationEvidenceReferenceRelationship" + idSuffix); |
||
| 148 | LookupAPI.populateDropdownElement("relationship", relationshipSelect, true); |
||
| 149 | var refExperienceLevel = evidencePanel.querySelector("#applicationEvidenceReferenceExpLevel" + idSuffix); |
||
| 150 | LookupAPI.populateDropdownElement("experience_level", refExperienceLevel, true); |
||
| 151 | |||
| 152 | var sampleFileTypeSelect = evidencePanel.querySelector("select[name=\"sample_type\"]"); |
||
| 153 | LookupAPI.populateDropdownElement("file_type", sampleFileTypeSelect, true); |
||
| 154 | |||
| 155 | //ADD EVENT HANDLERS |
||
| 156 | |||
| 157 | //adding save button handlers |
||
| 158 | var saveDeclarationBtn = evidencePanel.querySelector("." +SkillDeclarationAPI.wrapperClass + " .applicant-evidence__save-button"); |
||
| 159 | saveDeclarationBtn.addEventListener("click", function declarationSaveListener() { |
||
| 160 | SkillDeclarationAPI.saveSingleSkillDeclaration(criteriaId, function onDeclarationSaveSuccess() { |
||
| 161 | EvidenceAPI.setUiSaved(criteriaId, SkillDeclarationAPI, true); |
||
| 162 | }, null); |
||
| 163 | }); |
||
| 164 | var saveReferenceBtn = evidencePanel.querySelector("." + MicroReferenceAPI.wrapperClass + " .applicant-evidence__save-button"); |
||
| 165 | saveReferenceBtn.addEventListener("click", function referenceSaveListener() { |
||
| 166 | MicroReferenceAPI.saveSingleMicroReference(criteriaId, function onReferenceSaveSuccess() { |
||
| 167 | EvidenceAPI.setUiSaved(criteriaId, MicroReferenceAPI, true); |
||
| 168 | }, null); |
||
| 169 | }); |
||
| 170 | var saveSampleBtn = evidencePanel.querySelector("." + SkillSampleAPI.wrapperClass + " .applicant-evidence__save-button"); |
||
| 171 | saveSampleBtn.addEventListener("click", function sampleSaveListener() { |
||
| 172 | SkillSampleAPI.saveSingleSkillSample(criteriaId, function onSampleSaveSuccess() { |
||
| 173 | EvidenceAPI.setUiSaved(criteriaId, SkillSampleAPI, true); |
||
| 174 | }, null); |
||
| 175 | }); |
||
| 176 | |||
| 177 | //define a function to check skill declaration status |
||
| 178 | function declarationOnChange() { |
||
| 179 | SkillDeclarationAPI.onStatusChange(criteriaId); |
||
| 180 | } |
||
| 181 | //Add handler to experienence inputs |
||
| 182 | var experienceInputs = evidencePanel.querySelectorAll("input[name=experience]"); |
||
| 183 | for(var i=0; i<experienceInputs.length; i++) { |
||
| 184 | experienceInputs[i].onclick = declarationOnChange; |
||
| 185 | } |
||
| 186 | //Add handler to expertise inputs |
||
| 187 | var expertiseInputs = evidencePanel.querySelectorAll("input[name=expertise]"); |
||
| 188 | for(var i=0; i<expertiseInputs.length; i++) { |
||
| 189 | expertiseInputs[i].onclick = declarationOnChange; |
||
| 190 | } |
||
| 191 | //Add handler to Skill Declaration story text |
||
| 192 | var declarationText = evidencePanel.querySelector(".applicant-evidence__skill-declaration-text"); |
||
| 193 | declarationText.onchange = declarationOnChange; |
||
| 194 | |||
| 195 | //define a function to check micro-reference status |
||
| 196 | function referenceOnChange() { |
||
| 197 | MicroReferenceAPI.onStatusChange(criteriaId); |
||
| 198 | } |
||
| 199 | //Add onChange handler to all micro-reference inputs |
||
| 200 | evidencePanel.querySelector("input[name=\"reference_name\"]").onchange = referenceOnChange; |
||
| 201 | evidencePanel.querySelector("input[name=\"reference_email\"]").onchange = referenceOnChange; |
||
| 202 | evidencePanel.querySelector("select[name=\"reference_relationship\"]").onchange = referenceOnChange; |
||
| 203 | evidencePanel.querySelector("input[name=\"reference_from_date\"]").onchange = referenceOnChange; |
||
| 204 | evidencePanel.querySelector("input[name=\"reference_until_date\"]").onchange = referenceOnChange; |
||
| 205 | evidencePanel.querySelector("select[name=\"reference_exp_level\"]").onchange = referenceOnChange; |
||
| 206 | evidencePanel.querySelector("textarea[name=\"reference_story\"]").onchange = referenceOnChange; |
||
| 207 | |||
| 208 | //define a function to check skill sample status |
||
| 209 | function sampleOnChange() { |
||
| 210 | SkillSampleAPI.onStatusChange(criteriaId); |
||
| 211 | } |
||
| 212 | //Add onChange handler to all skill sample inputs |
||
| 213 | evidencePanel.querySelector("input[name=\"sample_name\"]").onchange = sampleOnChange; |
||
| 214 | evidencePanel.querySelector("select[name=\"sample_type\"]").onchange = sampleOnChange; |
||
| 215 | evidencePanel.querySelector("input[name=\"sample_date_created\"]").onchange = sampleOnChange; |
||
| 216 | evidencePanel.querySelector("input[name=\"sample_http_link\"]").onchange = sampleOnChange; |
||
| 217 | evidencePanel.querySelector("textarea[name=\"sample_story\"]").onchange = sampleOnChange; |
||
| 218 | |||
| 219 | |||
| 220 | //SET TEXTAREA FIELDS TO EMPTY |
||
| 221 | //This is to override IE11's habit of setting textarea values with their placeholder text |
||
| 222 | evidencePanel.querySelector(".applicant-evidence__skill-declaration-text").value = ""; |
||
| 223 | evidencePanel.querySelector("textarea[name=\"reference_story\"]").value = ""; |
||
| 224 | evidencePanel.querySelector("textarea[name=\"sample_story\"]").value = ""; |
||
| 225 | |||
| 226 | return evidencePanel; |
||
| 227 | }; |
||
| 228 | |||
| 521 |
This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.
To learn more about declaring variables in Javascript, see the MDN.